package com.pince.lifcycleliveav.pushplayer

import android.opengl.GLSurfaceView
import com.pince.lifcycleliveav.em.CameraType
import com.pince.lifcycleliveav.em.PushType

interface IPushPlayer {
    /**
     * 是否开启腾讯预览，
     * @param isTxPerView true 表示开启自定义预览
     *                        false表示启用腾讯预览
     */
    fun startPreView(isTxPerView: Boolean)

    /**
     * 开始推流
     */
    fun startPush(url: String): Int

    /**
     * 是不是正在推流
     */
    fun isStartPushing(): Boolean

    /**
     * 有业务方提供GLSurfaceView
     * return GLSurfaceView
     */
    fun setGLSurfView(glSurfaceView: GLSurfaceView): GLSurfaceView

    fun setLivePushConfig(pushType: PushType, videoResolution: Int)

    fun setLivePushConfig(pushType: PushType)

    /**
     * 美颜
     * @param style 磨皮风格：  0：光滑  1：自然  2：朦胧
     * @param beautyLevel 磨皮等级： 取值为 0-9.取值为 0 时代表关闭美颜效果.默认值: 0,即关闭美颜效果.
     * @param whiteningLevel 美白等级： 取值为 0-9.取值为 0 时代表关闭美白效果.默认值: 0,即关闭美白效果
     * @param ruddyLevel 红润等级： 取值为 0-9.取值为 0 时代表关闭美白效果.默认值: 0,即关闭美白效果.
     */
    fun setBeautyFilter(style: Int, beautyLevel: Int, whiteningLevel: Int, ruddyLevel: Int): Boolean


    fun switchCamera(cameraType: CameraType)

    fun switchCamera()

    /**
     * 设置镜像效果
     * 主播一般是采用前置摄像头进行直播。所以对比主播端预览画面和观众端的画面，会发现左右颠倒。这个跟我们照镜子的原理是一样的。如果你想要让画面保持一致，需要设置播放端水平镜像。
     */
    fun setMirror(isMirror: Boolean);


    /**
     * 停止推流
     */
    fun stopRtmpPublish()

    /**
     * Activity　　　Stop
     */
    fun onActivityPause()

    fun onActivityResume()

    fun addPushPlayerCtroller(pushPlayerController: IPushPlayerController)

    /**
     * 自定义推流
     * @param w int	视频图像的宽度；不能大于 TXLivePushConfig 中的 videoResolution 属性设定的宽度，否则会失败，小于时 SDK 会自动裁剪。
     * @param h int	视频图像的高度；不能大于 TXLivePushConfig 中的 videoResolution 属性设定的宽度，否则会失败，小于时 SDK 会自动裁剪。
     * 此方法实测会黑屏，使用下发的sendCustomVideoData自定义推流
     */
    fun sendCustomVideoTexture(data: Int, w: Int, h: Int): Int

    //自定义推流
    fun sendCustomVideoData(data: ByteArray, w: Int, h: Int): Int
}